import 'package:shared_preferences/shared_preferences.dart';

class Store {
  Store._privateConstructor();
  static final Store _instance = Store._privateConstructor();
  factory Store() => _instance;

  SharedPreferences? _prefs;

  // 初始化，App启动时调用一次即可
  Future<void> init() async {
    _prefs = await SharedPreferences.getInstance();
  }

  // 是否已初始化，避免未初始化调用出错
  bool get isInitialized => _prefs != null;

  // 设置字符串
  Future<bool> setString(String key, String value) async {
    _checkInit();
    return _prefs!.setString(key, value);
  }

  // 获取字符串，支持默认值
  String getString(String key, {String defaultValue = ''}) {
    _checkInit();
    return _prefs!.getString(key) ?? defaultValue;
  }

  // 设置布尔值
  Future<bool> setBool(String key, bool value) async {
    _checkInit();
    return _prefs!.setBool(key, value);
  }

  // 获取布尔值，支持默认值
  bool getBool(String key, {bool defaultValue = false}) {
    _checkInit();
    return _prefs!.getBool(key) ?? defaultValue;
  }

  // 设置整型
  Future<bool> setInt(String key, int value) async {
    _checkInit();
    return _prefs!.setInt(key, value);
  }

  // 获取整型，支持默认值
  int getInt(String key, {int defaultValue = 0}) {
    _checkInit();
    return _prefs!.getInt(key) ?? defaultValue;
  }

  // 设置双精度浮点数
  Future<bool> setDouble(String key, double value) async {
    _checkInit();
    return _prefs!.setDouble(key, value);
  }

  // 获取双精度浮点数，支持默认值
  double getDouble(String key, {double defaultValue = 0.0}) {
    _checkInit();
    return _prefs!.getDouble(key) ?? defaultValue;
  }

  // 移除某个key
  Future<bool> remove(String key) async {
    _checkInit();
    return _prefs!.remove(key);
  }

  // 清空所有数据（谨慎使用）
  Future<bool> clear() async {
    _checkInit();
    return _prefs!.clear();
  }

  void _checkInit() {
    if (_prefs == null) {
      throw Exception(
          'SharedPreferences未初始化，请先调用 Store().init() 并 await 完成');
    }
  }
}
